#define MAXSTRLEN 255
typedef unsigned char SString[MAXSTRLEN+1];
typedef enum {false,true} bool;

void test1(SString T)
{
    T[0]='*';
}

int Concat(SString T,SString S1,SString S2)
{
    bool uncut;
    int cnt;
    if(S1[0]+S2[0]<=MAXSTRLEN)
    {
        for(cnt=1;cnt<=S1[0];cnt++)
            T[cnt]=S1[cnt];
        for(cnt=1;cnt<=S2[0];cnt++)
            T[cnt+S1[0]]=S2[cnt];
        T[0]=S1[0]+S2[0];
        uncut=true;
    }
    else if(S1[0]<MAXSTRLEN)
    {
        for(cnt=1;cnt<=S1[0];cnt++)
            T[cnt]=S1[cnt];
        for(cnt=1+S1[0];cnt<=MAXSTRLEN;cnt++)
            T[cnt+S1[0]]=S2[cnt];
        T[0]=MAXSTRLEN;
        uncut=false;
    }
    else
    {
        for(cnt=0;cnt<=MAXSTRLEN;cnt++)
            T[cnt]=S1[cnt];
        uncut=false;
    }
    return uncut;
}

bool SubString(SString* Sub,SString S,int pos,int len)
{
    if(pos<1||pos>S[0]||len<0||len>S[0]-pos+1)
        return false;
    int cnt;
    for(cnt=1;cnt<=pos+len-1;cnt++)
        *Sub[cnt]=S[cnt];
    *Sub[0]=len;
    return true;
}

int main(void)
{
    SString A="0china";
    SString B="0america";
    A[0]=5;
    B[0]=7;

    /*
    test1(A);
    printf("%d:%c\n",1,A[0]);
    */

    ///*
    SString C="11111111111111111";
    //SString *C=&D;
    if(Concat(C,A,B))
    {
        int cnt;
        for(cnt=1;cnt<=C[0];cnt++)
            printf("%d:%c\n",cnt,C[cnt]);
    }

    /*
    int cnt;
    for(cnt=0;cnt<sizeof(A)/sizeof(char);cnt++)
    {
        printf("%d:%c\n",cnt,A[cnt]);
    }
    */
}
